package model

import "time"

// EmojiCategory 表情分类表
type EmojiCategory struct {
	ID          uint      `gorm:"primaryKey" json:"id"`
	Name        string    `gorm:"size:50;not null;comment:分类名称" json:"name"`
	Icon        string    `gorm:"size:200;comment:分类图标" json:"icon"`
	SortOrder   int       `gorm:"default:0;comment:排序" json:"sortOrder"`
	IsEnabled   bool      `gorm:"default:true;comment:是否启用" json:"isEnabled"`
	IsSystem    bool      `gorm:"default:false;comment:是否系统内置" json:"isSystem"` // 系统内置分类不可删除
	Description string    `gorm:"size:200;comment:分类描述" json:"description"`
	CreatedAt   time.Time `json:"createdAt"`
	UpdatedAt   time.Time `json:"updatedAt"`
}

// TableName 指定表名
func (EmojiCategory) TableName() string {
	return "emoji_categories"
}

// Emoji 表情表
type Emoji struct {
	ID         uint      `gorm:"primaryKey" json:"id"`
	CategoryID uint      `gorm:"not null;index:idx_category_id;comment:分类ID" json:"categoryId"`
	Name       string    `gorm:"size:50;not null;comment:表情名称" json:"name"`
	Code       string    `gorm:"size:50;uniqueIndex;comment:表情代码" json:"code"` // 例如: :smile:, :heart:
	ImageURL   string    `gorm:"size:500;comment:表情图片URL" json:"imageUrl"`     // 自定义表情图片
	Emoji      string    `gorm:"size:10;comment:Unicode表情" json:"emoji"`        // 例如: 😀, ❤️
	Type       string    `gorm:"type:enum('UNICODE','CUSTOM');not null;default:'UNICODE';comment:表情类型" json:"type"`
	SortOrder  int       `gorm:"default:0;comment:排序" json:"sortOrder"`
	IsEnabled  bool      `gorm:"default:true;comment:是否启用" json:"isEnabled"`
	IsSystem   bool      `gorm:"default:false;comment:是否系统内置" json:"isSystem"` // 系统内置表情不可删除
	UsageCount int       `gorm:"default:0;comment:使用次数" json:"usageCount"`
	CreatedBy  uint      `gorm:"comment:创建人ID" json:"createdBy"`
	CreatedAt  time.Time `json:"createdAt"`
	UpdatedAt  time.Time `json:"updatedAt"`

	// 关联
	Category *EmojiCategory `gorm:"foreignKey:CategoryID" json:"category,omitempty"`
}

// TableName 指定表名
func (Emoji) TableName() string {
	return "emojis"
}

// EmojiType 表情类型常量
const (
	EmojiTypeUnicode = "UNICODE" // Unicode 原生表情
	EmojiTypeCustom  = "CUSTOM"  // 自定义图片表情
)

// CreateEmojiCategoryReq 创建表情分类请求
type CreateEmojiCategoryReq struct {
	Name        string `json:"name" binding:"required,max=50"`
	Icon        string `json:"icon" binding:"max=200"`
	SortOrder   int    `json:"sortOrder"`
	Description string `json:"description" binding:"max=200"`
}

// UpdateEmojiCategoryReq 更新表情分类请求
type UpdateEmojiCategoryReq struct {
	Name        string `json:"name" binding:"max=50"`
	Icon        string `json:"icon" binding:"max=200"`
	SortOrder   *int   `json:"sortOrder"`
	IsEnabled   *bool  `json:"isEnabled"`
	Description string `json:"description" binding:"max=200"`
}

// EmojiCategoryListReq 表情分类列表请求
type EmojiCategoryListReq struct {
	IsEnabled *bool `form:"isEnabled"` // 是否启用
	Page      int   `form:"page"`
	PageSize  int   `form:"pageSize"`
}

// EmojiCategoryListResp 表情分类列表响应
type EmojiCategoryListResp struct {
	List     []EmojiCategory `json:"list"`
	Total    int64           `json:"total"`
	Page     int             `json:"page"`
	PageSize int             `json:"pageSize"`
}

// CreateEmojiReq 创建表情请求
type CreateEmojiReq struct {
	CategoryID uint   `json:"categoryId" binding:"required"`
	Name       string `json:"name" binding:"required,max=50"`
	Code       string `json:"code" binding:"required,max=50"` // 例如: smile, heart
	ImageURL   string `json:"imageUrl" binding:"max=500"`
	Emoji      string `json:"emoji" binding:"max=10"`
	Type       string `json:"type" binding:"required,oneof=UNICODE CUSTOM"`
	SortOrder  int    `json:"sortOrder"`
}

// UpdateEmojiReq 更新表情请求
type UpdateEmojiReq struct {
	CategoryID *uint  `json:"categoryId"`
	Name       string `json:"name" binding:"max=50"`
	ImageURL   string `json:"imageUrl" binding:"max=500"`
	Emoji      string `json:"emoji" binding:"max=10"`
	SortOrder  *int   `json:"sortOrder"`
	IsEnabled  *bool  `json:"isEnabled"`
}

// EmojiListReq 表情列表请求
type EmojiListReq struct {
	CategoryID *uint  `form:"categoryId"` // 分类筛选
	Type       string `form:"type"`       // 类型筛选
	IsEnabled  *bool  `form:"isEnabled"`  // 是否启用
	Keyword    string `form:"keyword"`    // 关键词搜索（名称或代码）
	Page       int    `form:"page"`
	PageSize   int    `form:"pageSize"`
}

// EmojiListResp 表情列表响应
type EmojiListResp struct {
	List     []EmojiWithCategory `json:"list"`
	Total    int64               `json:"total"`
	Page     int                 `json:"page"`
	PageSize int                 `json:"pageSize"`
}

// EmojiWithCategory 带分类信息的表情
type EmojiWithCategory struct {
	Emoji
	CategoryName string `json:"categoryName"`
}

// GetEmojisResp 获取表情包响应（前端使用）
type GetEmojisResp struct {
	Categories []EmojiCategoryWithEmojis `json:"categories"`
}

// EmojiCategoryWithEmojis 带表情列表的分类
type EmojiCategoryWithEmojis struct {
	ID          uint         `json:"id"`
	Name        string       `json:"name"`
	Icon        string       `json:"icon"`
	SortOrder   int          `json:"sortOrder"`
	Description string       `json:"description"`
	Emojis      []EmojiSimple `json:"emojis"`
}

// EmojiSimple 简化的表情信息
type EmojiSimple struct {
	ID        uint   `json:"id"`
	Name      string `json:"name"`
	Code      string `json:"code"`
	ImageURL  string `json:"imageUrl"`
	Emoji     string `json:"emoji"`
	Type      string `json:"type"`
	SortOrder int    `json:"sortOrder"`
}

